/**
 * 存储迁移工具（无控制台日志版本）
 * 用于清理旧的存储键和迁移数据
 *
 * 说明：应你的要求，已移除所有 console.* 日志与分组输出，
 * 仅保留实际的存储清理与数据格式优化逻辑，避免在控制台产生噪音。
 */

/**
 * 清理旧的存储键
 * 移除之前使用的键名，避免冲突
 */
export const cleanupOldStorageKeys = () => {
  const oldKeys = [
    'persist:core-admin-root',
    'persist:core-admin-menu',
    'persist:Core--root',
    'persist:Core--menu',
    'core-admin-themeSettings',
    'Core--themeSettings'
  ]

  // 逐一删除历史遗留键，若不存在则跳过
  oldKeys.forEach(key => {
    if (localStorage.getItem(key) !== null) {
      localStorage.removeItem(key)
    }
  })
}

/**
 * 验证新存储键是否正常工作（静默版）
 * 仅在内部触发 localStorage 访问以确保不报错，不输出日志
 */
export const validateNewStorageKeys = async () => {
  const { PERSIST_KEYS, STORAGE_KEYS } = await import('@/constants/storage')

  // 检查 Redux Persist 键（静默检查）
  const persistKeys = [`persist:${PERSIST_KEYS.ROOT}`, `persist:${PERSIST_KEYS.MENU}`]
  persistKeys.forEach(key => {
    // 使用 void 吞掉返回结果，确保无未使用变量告警
    void localStorage.getItem(key)
  })

  // 检查直接存储键（静默检查）
  Object.values(STORAGE_KEYS).forEach((key: any) => {
    void localStorage.getItem(key)
  })
}

/**
 * 优化存储数据格式
 * 将压缩的 JSON 数据重新格式化为易读格式（仅开发环境）
 * 注意：本函数不再输出任何日志
 */
export const optimizeStorageFormat = async () => {
  if (process.env.NODE_ENV !== 'development') {
    return // 生产环境跳过格式化
  }

  try {
    const { PERSIST_KEYS } = await import('@/constants/storage')

    const persistKeys = [`persist:${PERSIST_KEYS.ROOT}`, `persist:${PERSIST_KEYS.MENU}`]

    persistKeys.forEach(key => {
      const data = localStorage.getItem(key)
      if (data) {
        try {
          // 解析现有数据
          const parsed = JSON.parse(data)

          // 重新格式化（2 个空格缩进）
          const formatted = JSON.stringify(parsed, null, 2)

          // 只有在原数据为单行压缩且格式确实有改善时才更新
          if (formatted !== data && !data.includes('\n')) {
            localStorage.setItem(key, formatted)
          }
        } catch {
          // 静默忽略单个键格式化失败
        }
      }
    })
  } catch {
    // 静默忽略整体流程中的异常
  }
}

/**
 * 执行完整的存储迁移（静默版）
 * 在应用启动时调用
 */
export const migrateStorage = async () => {
  if (process.env.NODE_ENV === 'development') {
    cleanupOldStorageKeys()
    await validateNewStorageKeys()
    await optimizeStorageFormat()
  }
}

export default migrateStorage
